{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "6549d8f7-8ddb-4030-9638-46e4d586936e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sentence_transformers import SentenceTransformer\n",
    "from sklearn.metrics import confusion_matrix\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.metrics import ConfusionMatrixDisplay"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1ca7628b-272c-4948-8bd3-e5144b5a6636",
   "metadata": {},
   "outputs": [],
   "source": [
    "%run -i \"../util/util_simple_classifier.ipynb\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "284c0c89-1f9d-40e7-a66e-c68d180eae1c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>label</th>\n",
       "      <th>label_text</th>\n",
       "      <th>text_tokenized</th>\n",
       "      <th>text_clean</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1825</th>\n",
       "      <td>brookside actress keaveney dies actress anna k...</td>\n",
       "      <td>3</td>\n",
       "      <td>entertainment</td>\n",
       "      <td>[brookside, actress, keaveney, dies, actress, ...</td>\n",
       "      <td>brookside actress keaveney dies actress anna k...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1703</th>\n",
       "      <td>wal-mart is sued over rude lyrics the parents ...</td>\n",
       "      <td>3</td>\n",
       "      <td>entertainment</td>\n",
       "      <td>[wal-mart, sued, rude, lyrics, parents, 13-yea...</td>\n",
       "      <td>wal-mart sued rude lyrics parents 13-year-old ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>269</th>\n",
       "      <td>roddick to face saulnier in final andy roddick...</td>\n",
       "      <td>2</td>\n",
       "      <td>sport</td>\n",
       "      <td>[roddick, face, saulnier, final, andy, roddick...</td>\n",
       "      <td>roddick face saulnier final andy roddick play ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>playstation 3 processor unveiled the cell proc...</td>\n",
       "      <td>0</td>\n",
       "      <td>tech</td>\n",
       "      <td>[playstation, 3, processor, unveiled, cell, pr...</td>\n",
       "      <td>playstation 3 processor unveiled cell processo...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1435</th>\n",
       "      <td>downloads enter us singles chart digital music...</td>\n",
       "      <td>3</td>\n",
       "      <td>entertainment</td>\n",
       "      <td>[downloads, enter, us, singles, chart, digital...</td>\n",
       "      <td>downloads enter us singles chart digital music...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>text message record smashed uk mobile owners c...</td>\n",
       "      <td>0</td>\n",
       "      <td>tech</td>\n",
       "      <td>[text, message, record, smashed, uk, mobile, o...</td>\n",
       "      <td>text message record smashed uk mobile owners c...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1773</th>\n",
       "      <td>more women turn to net security older people a...</td>\n",
       "      <td>0</td>\n",
       "      <td>tech</td>\n",
       "      <td>[women, turn, net, security, older, people, wo...</td>\n",
       "      <td>women turn net security older people women inc...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1190</th>\n",
       "      <td>media gadgets get moving pocket-sized devices ...</td>\n",
       "      <td>0</td>\n",
       "      <td>tech</td>\n",
       "      <td>[media, gadgets, get, moving, pocket-sized, de...</td>\n",
       "      <td>media gadgets get moving pocket-sized devices ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1659</th>\n",
       "      <td>gervais writing simpsons episode the office s ...</td>\n",
       "      <td>3</td>\n",
       "      <td>entertainment</td>\n",
       "      <td>[gervais, writing, simpsons, episode, office, ...</td>\n",
       "      <td>gervais writing simpsons episode office ricky ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1716</th>\n",
       "      <td>iraq and afghanistan in wto talks the world tr...</td>\n",
       "      <td>1</td>\n",
       "      <td>business</td>\n",
       "      <td>[iraq, afghanistan, wto, talks, world, trade, ...</td>\n",
       "      <td>iraq afghanistan wto talks world trade organis...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1780 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   text  label     label_text  \\\n",
       "1825  brookside actress keaveney dies actress anna k...      3  entertainment   \n",
       "1703  wal-mart is sued over rude lyrics the parents ...      3  entertainment   \n",
       "269   roddick to face saulnier in final andy roddick...      2          sport   \n",
       "17    playstation 3 processor unveiled the cell proc...      0           tech   \n",
       "1435  downloads enter us singles chart digital music...      3  entertainment   \n",
       "...                                                 ...    ...            ...   \n",
       "86    text message record smashed uk mobile owners c...      0           tech   \n",
       "1773  more women turn to net security older people a...      0           tech   \n",
       "1190  media gadgets get moving pocket-sized devices ...      0           tech   \n",
       "1659  gervais writing simpsons episode the office s ...      3  entertainment   \n",
       "1716  iraq and afghanistan in wto talks the world tr...      1       business   \n",
       "\n",
       "                                         text_tokenized  \\\n",
       "1825  [brookside, actress, keaveney, dies, actress, ...   \n",
       "1703  [wal-mart, sued, rude, lyrics, parents, 13-yea...   \n",
       "269   [roddick, face, saulnier, final, andy, roddick...   \n",
       "17    [playstation, 3, processor, unveiled, cell, pr...   \n",
       "1435  [downloads, enter, us, singles, chart, digital...   \n",
       "...                                                 ...   \n",
       "86    [text, message, record, smashed, uk, mobile, o...   \n",
       "1773  [women, turn, net, security, older, people, wo...   \n",
       "1190  [media, gadgets, get, moving, pocket-sized, de...   \n",
       "1659  [gervais, writing, simpsons, episode, office, ...   \n",
       "1716  [iraq, afghanistan, wto, talks, world, trade, ...   \n",
       "\n",
       "                                             text_clean  \n",
       "1825  brookside actress keaveney dies actress anna k...  \n",
       "1703  wal-mart sued rude lyrics parents 13-year-old ...  \n",
       "269   roddick face saulnier final andy roddick play ...  \n",
       "17    playstation 3 processor unveiled cell processo...  \n",
       "1435  downloads enter us singles chart digital music...  \n",
       "...                                                 ...  \n",
       "86    text message record smashed uk mobile owners c...  \n",
       "1773  women turn net security older people women inc...  \n",
       "1190  media gadgets get moving pocket-sized devices ...  \n",
       "1659  gervais writing simpsons episode office ricky ...  \n",
       "1716  iraq afghanistan wto talks world trade organis...  \n",
       "\n",
       "[1780 rows x 5 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Same as 4.4\n",
    "train_df = pd.read_json(\"../data/bbc_train.json\")\n",
    "test_df = pd.read_json(\"../data/bbc_test.json\")\n",
    "train_df.sample(frac=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b620a9b4-f088-4e41-8a77-4fb460a41893",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = SentenceTransformer('all-MiniLM-L6-v2')\n",
    "def get_sentence_vector(text, model):\n",
    "    sentence_embeddings = model.encode([text])\n",
    "    return sentence_embeddings[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fc1697dd-9161-4ccb-9cf2-b65a73a81f72",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_classifier(X_train, y_train):\n",
    "    clf = SVC(C=0.1, kernel='rbf')\n",
    "    clf = clf.fit(X_train, y_train)\n",
    "    return clf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "871e3ba5-56b9-415d-ba69-2044a5da3130",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "               precision    recall  f1-score   support\n",
      "\n",
      "         tech       1.00      1.00      1.00       321\n",
      "     business       1.00      1.00      1.00       408\n",
      "        sport       1.00      1.00      1.00       409\n",
      "entertainment       1.00      1.00      1.00       309\n",
      "     politics       1.00      1.00      1.00       333\n",
      "\n",
      "     accuracy                           1.00      1780\n",
      "    macro avg       1.00      1.00      1.00      1780\n",
      " weighted avg       1.00      1.00      1.00      1780\n",
      "\n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "         tech       0.97      0.95      0.96        80\n",
      "     business       0.98      0.97      0.98       102\n",
      "        sport       0.98      1.00      0.99       102\n",
      "entertainment       0.96      0.99      0.97        77\n",
      "     politics       0.98      0.96      0.97        84\n",
      "\n",
      "     accuracy                           0.98       445\n",
      "    macro avg       0.97      0.97      0.97       445\n",
      " weighted avg       0.98      0.98      0.98       445\n",
      "\n"
     ]
    }
   ],
   "source": [
    "target_names=[\"tech\", \"business\", \"sport\", \"entertainment\", \"politics\"]\n",
    "vectorize = lambda x: get_sentence_vector(x, model)\n",
    "(X_train, X_test, y_train, y_test) = create_train_test_data(train_df, test_df, vectorize, column_name=\"text_clean\")\n",
    "clf = train_classifier(X_train, y_train)\n",
    "print(classification_report(train_df[\"label\"], y_train, target_names=target_names))\n",
    "test_classifier(test_df, clf, target_names=target_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "dc6c3521-e6ee-47dc-9f2d-0ef9abe7efd8",
   "metadata": {},
   "outputs": [],
   "source": [
    "num_to_text_mapping = {0:\"tech\", 1:\"business\", 2:\"sport\", 3:\"entertainment\", 4:\"politics\"}\n",
    "test_df[\"pred_label\"] = test_df[\"prediction\"].apply(lambda x: num_to_text_mapping[x])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "f1abf63a-53e8-4abd-9908-d0029e54744d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cm = confusion_matrix(test_df[\"label_text\"], test_df[\"pred_label\"], labels=target_names)\n",
    "disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=target_names)\n",
    "disp.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "af30b607-f429-44be-aea0-4971c3fac8ac",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
